This invention generally related to communications circuitry and, more particularly, to a system and method of monitoring the performance of Gigabit Ethernet (GBE) and fiber channel communications.
8B/10B coding is transmission coding scheme used for the Gigabit Ethernet. The DC balance concept used in 8B/10B coding is similar to other protocols used for the transmission of information via fiber channels. Each 8-bit data byte is represented by two distinct 10-bit words. For example:                000 11000110011 0100 or 001100 1011        
512 code words represent 256 bytes, and 12 special function code words also exist. Several 8-bit codes are only mapped to one 10-bit word and not all 10-bit words are complete complements of each other.
TABLE 18B/10B Sample Data CodesByteCode WordCode WordBal/NameValue8 Bits(RD−)(RD+)Unbal/D24.018h00011000110011 0100001100 1011Balanced/D25.019h00011001011001 1011100110 0100Unbalanced/D26.01Ah00011010101001 1011010110 0100Unbalanced/D27.01Bh00011011110110 0100001001 1011Balanced/D28.01Ch00011100110001 1011001110 0100Unbalanced/D29.01Dh00011101101110 0100010001 1011Balanced/D30.01Eh00011110011110 0100100001 1011Balanced/D31.01Fh00011111101011 0100010100 1011Balanced 
The purpose of 8B/10B coding is to maintain DC balance, ensuring that a data stream can be AC coupled without distortion, and to avoid short-term DC offsets by minimizing run length. Invalid code words and code word sequences that break parity rules are possible error types. There are three basic rules that are used in transmitting 8B/10B data:                A data word NEVER contains more than 4 consecutive ones or zeros, this reduces the “Run Length” on the line;        A word containing 4 zeros may only be followed by a word with 5 or 6 zeros; and        A word containing 6 zeros may only be followed by a word with 5 or 4 zeros. Minimizing the “Run Length” avoids any short term DC offsets.        
Parity tracks the number of ones and zeros on a line in an attempt to keep their numbers equal +/−1 bit. The “Ideal” pattern is “1 0 1 0”. For example:                101010101010101010101010101010101010Number of 1s=Number of 0s        
An equal number of ones and zeros over an entire line ensures the data stream may, be AC-coupled onto a medium without distortion.
A balanced code word has an equal number of ones and zeros. For example:
/D24.000110010115 zeros and 5 onesinverse1100110100still has 5 zeros and 5 ones. 
An unbalanced code word has an unequal number of ones and zeros. For example:
/D25.010011001006 zeros and 4 onesinverse01100110114 zeros and 6 ones. 
The choice of which code word to use depends on the running disparity. Single-bit indications of which way the ± bit parity imbalance is leaning, are updated on a code-word by code-word basis.                Positive Running Disparity (RD+)More “1”s than “0”s being transmitted        Negative Running Disparity (RD−)More “0”s than “1”s being transmitted.        
Running disparity is used in 8B/10B encoding to determine which of the two possible 10-bit codes to send for each 8-bit word. Running Disparity is calculated on the basis of sub-blocks—a six-bit, and then a four-bit, sub-blocks that make up the complete 10 bit word. Running Disparity is “+” if the sub-block contains more ones than zeros or if the six-bit sub-block is 000111, or the four bit sub-block is 0011. Running Disparity is “−” if the sub-block contains more zeros than ones or if the six-bit sub-block is 111000, or the four-bit sub-block is 1100. If the Positive and Negative sub-block criteria has not been met, the running disparity will remain unchanged at the end of the sub-block.
For example, the following is a sequence of 8-bit words to be sent:
001111111111011111111100D31.123.7D28.7 
The encoder begins with RD− and selects appropriate 10-bit code word for D31.0:                Select from RD− column.        
Then, the encoder examines previously sent word to determine code word for D23.7:                Examine “101011 1001”=>Select from RD+column        
Then, the encoder examines previous sent word to determine code word for D28.7:                Examine “000101 1110”=>Select from same (RD+) column.        
Transmitted sequence:                RD−101011 1001 RD+000101 1110 RD+001110 0001 RD+        
The following is an example of f 8B/10B Coding Example Using RD.
8 Bit Data Sequence:
001111111111011111111100                 Unequal number of 1s and 0s (19 Ones, 5 Zeros)        Long runs of 1s and 0s possibleTransmitted, 10-Bit Encoded Sequence:        RD−101011 1001 RD−000101 1110 RD+001110 0001 RD+        Balanced Line (15 Ones, 15 Zeros)        Maximum run length of 4 consecutive 1s or 0s.        
With respect to word alignment, data is searched for a 10-bit “special” K28.5 word or a Comma. The choice of which K28.5 (or Comma) to search for is dependent upon the current running disparity (RD).                K28.5 word 110000 0101 or 001111 1010        Comma (1st 7 bits of K28.5) 1100000 or 0011111.        
In accordance with the IEEE 802.3z standards which govern GBE protocol communications, 8B/10B code word errors and running disparity errors are both referred to as “invalid code words”, and referred to herein as IEEE 802.3z invalid code word errors.
It would be advantageous if a more specific error analysis could be made available than that provided under the IEEE 802.3z standard.
It would be advantageous if IEEE 802.3z invalid code errors could be differentiated into 8B/10B code word errors and running disparity errors to aid in the analysis of line and equipment failures.
It would be advantageous if a simpler measurement of DC imbalances could be provided in the analysis of GBE and fiber channel communications, in addition to the IEEE 802.3z standard error signal.
It would be advantageous if the error signals detected in monitoring a GBE or fiber channel communication could be counted and sorted into a meaningful collection of error data.